package net.sxnic.ugr.dept;

import java.util.List;
import java.util.Map;

import net.sxinfo.core.spring25.Manager;
import net.sxnic.ugr.user.User;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface DeptManager extends Manager<Dept,String> {
	
	/**
	 * 查询部门代码和部门名称的map
	 * @return
	 */
	@Transactional(readOnly=true)
	Map<String,String> findMap();
	
	/**
	 * 按code查询部门
	 * @param code
	 * @return
	 */
	@Transactional(readOnly=true)
	Dept findByCode(String code);
		
	/**
	 * 根据用户信息查询 用户所在的部门列表
	 * @param user
	 * @return
	 */
	List<Dept> findByUser(User user);
	
	/**
	 * 根据用户查询所在部门列表，并把部门编码deptCode整合为逗号分隔的序列。结果一般要更新到User表中的DeptCode字段
	 * @param user
	 * @return
	 */
	String findDeptCodesByUser(User user);
	
	/**
	 * 根据用户登录名，查询用户所在部门的列表
	 * @param userName
	 * @return
	 */
	List<Dept> findByUserName(String userName);
	
	/**
	 * 查询所有的职能处室
	 * @return
	 */
	List<Dept> findPureFunctionDepart();

	/**
	 * 获取顶级部门分类
	 * @return
	 */
	List<Dept> getTopList();

	/**
	 * 获取指定部门的子分类
	 */
	List<Dept> getChildList(String root);
	
	/**
	 * 根据部门类别获取部门List
	 * @param ctype 部门类别
	 * @return 获取指定类型的部门list
	 */
	List<Dept> getDeptByType(String ctype);
}
